import colors from 'colors'
import { Request, Response } from "express";
import { time } from '../utils/day.utc';

/**
 * ### 全局错误处理器
 * - 用于处理错误情况，防止请求错误带来的服务器崩溃
 */

export const globalErrProcMidd = (err: Error, req: Request, res: Response, next: any) => {
  // 已知错误
  if (err.message === 'jwt expired') return cc(res, { err: '登录已过期，请重新登录', message: err.message, stack: err.stack }, 401, 1)

  // 如上所示，您可以添加更多已知错误...

  // 统一捕获未知错误
  cc(res, { err: '请求发生错误，请稍后重试: ', message: err.message, stack: err.stack })
}

const cc = (res: Response, err: any, status: number = 402, prompt: number = 0) => {
  // 打印响应日志
  console.log(colors.bold(`\n 全局错误处理器${status}：`).bgRed);
  console.log(`\n====== ${time().format('YYYY-MM-DD HH:mm:ss')} ======\n`);
  console.log(`状态码 (status): ${status}`);
  console.log(`信息 (message): ${err.err}`);
  console.log(`\n响应数据 (data):`);
  console.log(err.message);
  console.log(`\n====== ${time().format('YYYY-MM-DD HH:mm:ss')} ======\n`);

  return res.send({
    status: status,
    prompt: prompt,
    message: err instanceof Error ? err.message : err
  })
}